package cn.itcast.nems.order.dto;

import cn.itcast.nems.base.dto.EntityExtendAttributeDTO;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;

import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@Data
public class NewOrderDTO implements Serializable {

    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = 2705304290880476285L;
    /**
     * NEW("新报名"), RENEWAL("升级"), TRANSFER("转班"), REPETITION("重读/留级")
     */
    private String source ;

    /**
     * 业务订单编号，需要接入方传递。要求主租户内唯一。
     */
    private String bizOrderNo;

    /**
     * 订单来源渠道id，来自于主数据
     */
    private Integer originChannelId;

    /**
     * 订单来源渠道名称，来自于主数据
     */
    private String originChannelName;

    /**
     * 用户账户ID：来自于统一用户中心下的账户ID。
     */
    private String accountId;

    /**
     * 业务日期：存在单据录入日期和实际业务发生日期不一致的情况。用来业务补录时记录实际发生日期。
     */
    private LocalDateTime bizDate;

    /**
     * 币种，直接“CNY”
     */
    private String currency = "CNY";

    /**
     * 付款类型，如先付费、后付费，来自于主数据
     */
    private Integer paymentTypeId;

    /**
     * 付款类型，如先付费、后付费，来自于主数据
     */
    private String paymentTypeName;

    /**
     * 订单备注
     */
    private String remark;

    /**
     * 创建订单的业务线，来自于主数据
     */
    private Integer businessLineId;

    /**
     * 创建订单的业务线，来自于主数据
     */
    private String businessLineName;

    /**
     * 订单创建人
     */
    private String createdBy;
    
    /** 关联订单ID */
    private String associatedOrderId;
    /**
     * 是否插班
     */
    private Boolean isJoinClass;
    /**
     * 插班日期
     */
    private LocalDate theFreshDate;
    
    /** 订单行 */
    private List<NewOrderLineDTO> lines;

    /** 订单优惠明细 */
    private List<NewOrderDiscountDTO> discounts;

    /** 订单优惠明细 */
    private List<NewOrderDiscountDTO> personalDiscounts;
    
    /** 订单扩展属性 */
    private List<EntityExtendAttributeDTO> extendAttributes;
    
    /** 订单客户关系 */
    private NewOrderCustomerRelationshipDTO orderCustomerRelationship;

    /** 订单对应支付链接 */
    private String payUrl  ;

    /**
     * 已支付金额。单位：分。注：每次支付累计，退费不减！
     */
    private Integer paidAmount;
    /**
     * 是否校验产品价格， 如果是后端基于凭单单需要生成订单，凭单根据开班时间查询执行价格、创建订单跟进当前时间查询产品规则价格可能会有差异
     */
    @JsonIgnore
    private Boolean isValidatePrice ;
    // 老EMS studentjoinclass 主键  ，  不能支持多阶段情况
    private Integer joinClassId ;
}
